home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 011 / curdir.lqr / CURDIR.ASM next >
Assembly Source File  |  1985-06-03  |  3KB  |  111 lines

  1.      INCLUDE MACROS.ASM
  2.      BEGINCOM DIRSAV
  3.      JMP   DIRS100
  4. DIRSTR     LABEL BYTE
  5. ;
  6. ;  DISK RECORD
  7. ;
  8. RECBEGIN EQU   $
  9. DRIVENO  DB    0
  10. DRIVE     DB    0
  11.      DB    ':\'
  12. PATH     DB    64 DUP (?)
  13. LRECL     EQU  ($-RECBEGIN)
  14. ;
  15. ;
  16. ;
  17. SAVEFILE DB    'C:\DIR%.SAV',0
  18. ;
  19. ;
  20. ;
  21. DIRS100:
  22.      MOV   AX,CS
  23.      MOV   DS,AX
  24. ;
  25. ;  CHECK PARM
  26. ;
  27.      MOV   BX,80H           ;PARAMETER SAVE AREA
  28.      MOV   CL,BYTE PTR [BX]    ;GET PARAMETER CHARACTER COUNT
  29.      OR    CL,CL           ;ANY PARM
  30.      JZ    DIRS140           ;NO-ISSUE ERROR
  31.      INC   BX           ;POINT TO PARM AREA
  32. DIRS120: MOV   AL,BYTE PTR [BX]    ;GET A CHARACTER
  33.      CMP   AL, '/'             ;PARM FLAG?
  34.      JE    DIRS160           ;YES-NEXT BYTE IS PARM
  35.      INC   BX           ;ELSE, KEEP CHECKING
  36.      LOOP  DIRS120
  37. DIRS140: JMP   DIRS900           ;JUMP TO INVLD PARM ERROR
  38. DIRS160: MOV   AL,BYTE PTR [BX+1]  ;GET PARM
  39.      CMP   AL,'R'              ;IS IT RESTORE?
  40.      JE    DIRS300           ;YES-THEN DO IT
  41.      CMP   AL,'r'              ;IS IT RESTORE?
  42.      JE    DIRS300           ;YES-THEN DO IT
  43.      CMP   AL,'S'              ;IS IT SAVE
  44.      JE    DIRS200           ;YES-SAVE DIRECTORY
  45.      CMP   AL,'s'              ;IS IT SAVE
  46.      JNE   DIRS140           ;NO-GO TO INVALID PARM MESSAGE
  47. ;
  48. ;  SAVE CURRENT DIRECTORY/DRIVE TO DISK
  49. ;
  50. DIRS200:
  51.      @DOS  19H           ;GET CURRENT DISK IN AL
  52.      MOV   DRIVENO,AL       ;DRIVE NUMBER = 0-3
  53.      MOV   DL,AL           ;SAVE NUMBER FOR GETTING DIR
  54.      ADD   AL,'A'              ;GET DRIVE IN CHARACTER FORMAT
  55.      MOV   DRIVE,AL        ;SAVE CHARACTER DRIVE NUMBER
  56. ;
  57.      INC   DL           ;GET DRIVE # (1-4)
  58.      MOV   SI,OFFSET PATH       ;CURRENT PATH SAVE AREA
  59.      @DOS  47H           ;GET CURRENT DIRECTORY
  60.      MOV   DX,OFFSET SAVEFILE  ;POINT TO TEMP FILENAME
  61.      SUB   CX,CX           ;NO SPECIAL ATTRIBUTES
  62.      @DOS  3CH           ;CREATE THE FILE, OPEN FOR R/W
  63.      JC    DIRS290           ;CREATE FAIL - DISK ERR
  64.      MOV   BX,AX           ;COPY FILE HANDLE
  65.      MOV   CX,LRECL        ;BYTES TO SEND
  66.      MOV   DX,OFFSET RECBEGIN  ;START OF RECORD POINTER
  67.      @DOS  40H           ;WRITE THE FILE
  68.      JC    DIRS290           ;JMP IF ERR
  69.      CMP   AX,CX           ;CORRECT WRITE COUNT?
  70.      JNE   DIRS290           ;NO-DISK ERR
  71.      @DOS  3EH           ;OTHERWISE-CLOSE FILE
  72.      JMP   DIRS990           ;AND EXIT
  73. DIRS290: JMP   DIRS920
  74. ;
  75. ;  RESTORE SAVED DIRECTORY FROM DISK
  76. ;
  77. DIRS300:
  78.      MOV   DX,OFFSET SAVEFILE  ;POINT TO SAVE FILENAME
  79.      SUB   AX,AX           ;OPEN FOR READ
  80.      @DOS  3DH           ;OPEN THE FILE
  81.      JC    DIRS910           ;CY=NO FILE
  82.      MOV   BX,AX           ;SAVE HANDLE
  83.      MOV   CX,LRECL        ;GET RECORD LENGTH
  84.      MOV   DX,OFFSET RECBEGIN  ;POINT TO DATA AREA
  85.      @DOS  3FH           ;READ THE DATA
  86.      JC    DIRS930           ;JMP TO ERR IF CANT READ
  87.      @DOS  3EH           ;CLOSE THE FILE
  88.      MOV   DX,OFFSET SAVEFILE  ;POINT TO SAVE FILENAME
  89.      @DOS  41H           ;DELETE THE FILE
  90.      MOV   DL,DRIVENO       ;GET DISK NUMBER
  91.      @DOS  0EH           ;SELECT DISK
  92.      MOV   DX,OFFSET DRIVE       ;POINT TO FULL PATH
  93.      @DOS  3BH           ;SWITCH TO SAVED DIR
  94.      JC    DIRS940           ;MSG IF ERR
  95.      JMP   DIRS990           ;ELSE-DONE
  96. ;
  97. ;  ERRORS
  98. ;
  99.  
  100. DIRS910: @MSG  'NOTHING TO RESTORE'
  101.      JMP   DIRS990
  102. DIRS930: @MSG  'DISK READ ERROR'
  103.      JMP   DIRS990
  104. DIRS920: @MSG  'DISK WRITE ERROR'
  105.      JMP   DIRS990
  106. DIRS940: @MSG  'CANT SEL'
  107.      JMP   DIRS990
  108. DIRS900: @MSG  'INVALID PARM MUST BE /S OR /R'
  109. DIRS990: @DOS  0           ;EXIT
  110.      ENDCOM DIRSAV
  111.